home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / geomview / source.lha / Geomview / doc / OOGL.m.doc < prev    next >
Text File  |  1993-12-06  |  17KB  |  418 lines

  1.  
  2. NOTE: This file is autogenerated from the Geomview manual.
  3.   For references to things not in this file, see the manual.
  4.   The manual is distributed in the "doc" subdirectory.
  5.  
  6.  
  7. Mathematica Graphics in Geomview or RenderMan
  8. *********************************************
  9.  
  10. Geomview comes with some Mathematica packages that let you use use
  11. Geomview to display Mathematica graphics.  Mathematica is a commercial
  12. mathematical software system available from Wolfram Research, Inc.
  13.  
  14. There are two ways to do this.
  15.   1. Use Mathematica to write a graphics object to a file in OOGL format
  16.      or in RIB format.
  17.   2. Use Geomview as the default display for all 3D graphics output in
  18.      Mathematica.
  19. You can also use these packages to save Mathematica graphics in
  20. RenderMan (RIB) format.
  21.  
  22. Since the format of Mathematica graphics objects is different from the
  23. OOGL formats, both of these methods involve translating Mathematica
  24. graphics to OOGL format.  Geomview is distributed with a Mathematica
  25. package which does this translation.  Before doing either of the
  26. above you must install this package.
  27.  
  28. Info file: geomview,    -*-Text-*-
  29. produced by texinfo-format-buffer
  30. from file: geomview.tex
  31.  
  32.  
  33.  
  34. Using Mathematica to generate OOGL files
  35. ========================================
  36.  
  37. The package `OOGL.m' allows Mathematica to write graphics objects in
  38. OOGL format.  To use it, give the command `<< OOGL.m' to Mathematica to
  39. load the package.  The `WriteOOGL[FILE,GRAPHICS]' command writes an OOGL
  40. description of the 3D graphics object GRAPHICS to the file named FILE.
  41.  
  42. This package also provides the `Geomview' command which sends a
  43. 3D graphics object to Geomview.  The first time you use this command
  44. it starts up a copy of Geomview.  Later calls send the graphics to the
  45. same Geomview.  There are two ways to use the `Geomview' command.
  46.  
  47. `Geomview[GRAPHICS]'
  48.      Sends the 3D graphics object GRAPHICS to Geomview as a geom named
  49.      `Mathematica'.  Subsequent usage of `Geomview[GRAPHICS]'
  50.      replaces the `Mathematica' object in Geomview with the new
  51.      GRAPHICS.
  52.  
  53. ``Geomview[NAME,GRAPHICS]''
  54.      Sends the 3D graphics object GRAPHICS to Geomview as a geom named
  55.      NAME.  You can use multiple calls of this form with different
  56.      names to cause Geomview to display several Mathematica objects at once
  57.      and allow independent control over them.
  58.      % math
  59.      Mathematica 2.0 for SGI Iris
  60.      Copyright 1988-91 Wolfram Research, Inc.
  61.       -- GL graphics initialized --
  62.  
  63.      In[1] := <<OOGL.m
  64.  
  65.      In[2] := Plot3D[Sin[x + Sin[y]], {x,-2,2},{y,-2,2}]
  66.  
  67.      Out[2] := -Graphics3D-
  68. This displays graphics in the usual Mathematica way here.
  69.      In[3] := WriteOOGL["math.oogl", %2]
  70.  
  71.      Out[3] := -Graphics3D-
  72. This displays nothing new but writes the file `math.oogl'.
  73. You can now load that file into Geomview on any computer.  Alternately,
  74. you can use the `Geomview' command to start up a copy of Geomview
  75. from within Mathematica.
  76.      In[5] := Geomview[%2]
  77.  
  78.      Out[5] := -Graphics3D-
  79.  
  80.  
  81.  
  82. Using Geomview as Mathematica's Default 3D Display
  83. ==================================================
  84.  
  85. The package `Geomview.m' arranges for Geomview to be the
  86. default display program for 3D graphics in Mathematica.  To
  87. load it, give the command `<< Geomview.m' to Mathematica.
  88. Thereafter, whenever you display 3D graphics with `Plot3D'
  89. or `Show', Mathematica will send the graphics to Geomview.
  90.  
  91. Loading `Geomview.m' implicitly loads `OOGL.m' as well, so you
  92. can use the `Geomview' and `WriteOOGL' as described above
  93. after loading `Geomview.m'.  You do not have to separately load
  94. `OOGL.m'.
  95.      % math
  96.      Mathematica 2.0 for SGI Iris
  97.      Copyright 1988-91 Wolfram Research, Inc.
  98.       -- GL graphics initialized --
  99.  
  100.      In[1] := <<Geomview.m
  101.  
  102.      In[2] := Plot3D[x^2 + y^2, {x, -2, 2}, {y, -2, 2}]
  103.  
  104.      Out[2] := -SurfaceGraphics-
  105. This invokes geomivew and loads the graphics object into it.
  106.      In[3] := Plot3D[{x*y + 6, RGBColor[0,x,y]}, {x,0,1}, {y,0,1}]
  107.  
  108.      Out[3] := -SurfaceGraphics-
  109. This replaces the previous Geomview object by the new object. 
  110.      In[4] := Geomview[{%2,%3}]
  111.  
  112.      Out[4] := {-SurfaceGraphics-, -SurfaceGraphics-}
  113. This displays both objects at once.  You also can have more than one
  114. Mathematica object at a time on display in Geomview, and have separate
  115. control over them, by using the `Geomview' command with a name,
  116. *Note OOGL.m::.
  117.      In[5] := Graphics3D[ {RGBColor[1,0,0], Line[{ {2,2,2},{1,1,1} }] }]
  118.  
  119.      Out[5] := -Graphics3D-
  120.  
  121.      In[6] := Geomview["myline", %5]
  122. This addes the `Line' specified in `In[5]' to the existing
  123. Geomview display.  It can be controlled independently of the
  124. "Mathematica" object, which is currently the list of two plots.
  125.      In[7] := <<GL.m
  126. If you're on an SGI, loading `GL.m' returns Mathematica to its
  127. usual 3D graphics display.  To do this on a NeXT you should load
  128. `PSDirect.m' if you are using Mathematica in a notebook, or
  129. `NeXT.m' if you invoked Mathematica from a shell.  The following
  130. plot will appear in a normal static Mathematica window.
  131.      In[8] := ParametricPlot3D[{Sin[x],Sin[y],Sin[x]*Cos[y]}, {x,0,Pi},{y,0,Pi}]
  132.  
  133.      Out[8] := -Graphics3D-
  134. We can return to Geomview graphics at any time by reloading `Geomview.m'.
  135.      In[9] := <<Geomview.m
  136.  
  137.      In[10] := Show[%8]
  138.  
  139.      Out[10] := -Graphics3D-
  140.  
  141.      In[11] := ParametricPlot3D[
  142.             {(2*(Cos[u] + u*Sin[u])*Sin[v])/(1 + u^2*Sin[v]^2),
  143.             (2*(Sin[u] - u*Cos[u])*Sin[v])/(1 + u^2*Sin[v]^2),
  144.             Log[Tan[v/2]] + (2*Cos[v])/(1 + u^2*Sin[v]^2)},
  145.            {u,-4,4},{v,.01,Pi-.01}]
  146.  
  147.      Out[11] := -Graphics3D-
  148. This last plot is Kuen's surface, a surface of constant negative
  149. curvature.  Parametrization from Alfred Gray's *Modern Differential
  150. Geometry of Curves and Surfaces* textbook.
  151.  
  152.  
  153. Using Mathematica to generate RenderMan files
  154. =============================================
  155.  
  156. In addition to the `WriteOOGL' and `Geomview' commands
  157. described above, the package `OOGL.m' also defines the command
  158. `WriteRIB' which writes a 3D graphics object to a RenderMan RIB
  159. file:  `WriteRIB[FILE, GRAPHICS]' writes GRAPHICS
  160. to file FILE.  RenderMan is a commercial rendering system available
  161. from Pixar, Inc., which can produce extremely high quality images.
  162.      In[1] := <<OOGL.m
  163.  
  164.      In[2] := <<Graphics/Polyhedra.m
  165.  
  166.      In[3] := Graphics3D[Cube[]]
  167.  
  168.      Out[3] := -Graphics3D-
  169.  
  170.      In[4] := WriteRIB["cube.rib", %3]
  171.  
  172.      Out[4] := -Graphics3D- This generates the file `math.rib'.  This is
  173. a ready-to-render RIB file of the given geometry, using a default camera
  174. position, lighting, and the "plastic" shader. In a shell window, type
  175. `render cube.rib' to generate the image file `mma.tiff'. Of course, you
  176. need to have RenderMan installed for this to work. A shortcut to render
  177. from inside Mathematica is `WriteRIB["!render", foo]'.
  178.  
  179. `WriteRIB' works by first converting the Mathematica graphics
  180. object to OOGL format using `WriteOOGL' and then calls an external
  181. program `oogl2rib' to convert OOGL to RIB format.  The
  182. oogl2rib program takes several options which you can specify in a
  183. string as an optional third argument to `WriteRIB'.  The default
  184. option string is `" -n mma.tiff "', which indicates that the RIB
  185. file should generate a rendered TIFF file named `mma.tiff'.  A
  186. particularly useful option is `-g', which tells oogl2rib to
  187. convert only the geometry into a RIB fragment. You can insert that
  188. fragment into a full RIB file of your own making with camera positions
  189. and shaders of your choice, to harness the full power of RenderMan.
  190.  
  191. The full usage of oogl2rib is:
  192.      oogl2rib [-n NAME] [-B R,G,B] [-w WIDTH] [-h HEIGHT] [-fgb] [INFILE] [OUTFILE]
  193. By default it reads from stdin and writes to stdout.
  194. Either INFILE or OUTFILE may be `-', which means
  195. use stdin/stdout.  The options are:
  196.  
  197. `-n NAME'
  198.      Use NAME for the name of the rendered TIFF file (default
  199.      "geom.tiff") or framebuffer window (default "geom.rib").
  200.  
  201. `-B R,G,B'
  202.      Use background color (R,G,B).  Each component ranges
  203.      from 0 to 1. Default: none.
  204.  
  205. `-w WIDTH -h HEIGHT'
  206.      Rendered frame will be WIDTH by HEIGHT pixels.
  207.  
  208. `-f'
  209.      RIB file renders to on-screen framebuffer instead of TIFF file.
  210.  
  211. `-g'
  212.      Output only the geometry in RIB format.
  213.  
  214. `-b'
  215.      Output only a Quick Renderman clip object.  Ignores -nBwhf.
  216.  
  217.  
  218.  
  219.  
  220. Using Geomview and Mathematica on Different Computers
  221. =====================================================
  222.  
  223. It is possible to use Geomview to display graphics generated by
  224. Mathematica running on a different computer.  If each computer is either
  225. an SGI or a NeXT and they are networked together, you can tell
  226. Mathematica to use a remote host for Geomview graphics.  If you want to
  227. use Mathematica on a computer that is not networked with your Geomview
  228. computer, or on any kind of computer other than an SGI or a NeXT (for
  229. example a PC or a Mac), you can write out *chunk* files in
  230. Mathematica which you transfer to the Geomview computer and then
  231. translate to OOGL format.
  232.  
  233. Using a Networked Geomview Host
  234. -------------------------------
  235.  
  236. The `Geomview' command looks at the `DISPLAY' or
  237. `REMOTEHOST' environment variables to try to determine if you are
  238. logged in from another computer.  If either of these indicates that you
  239. are, `Geomview' will attempt to run Geomview on that
  240. computer.  In order for this to work, your network must be configured
  241. such that the Mathematica computer can successfully `rsh' to the
  242. Geomview computer without giving a password.
  243.  
  244. You can also explicitly set the `DisplayHost' option to the
  245. `Geomview' command to a string which is the desired hostname, for
  246. example:
  247.      In[1] := << OOGL.m
  248.  
  249.      In[2] := Plot3D[Sin[x + Sin[y]], {x,-2,2},{y,-2,2}]
  250.  
  251.      Out[2] := -Graphics3D-
  252.  
  253.      In[3] := Geomview[%3, DisplayHost->"riemann"] This displays the
  254. graphics `%3' on the remote host named `riemann'.
  255.  
  256. `Geomview' recognizes the string `"local"' as a value for
  257. `$DisplayHost'; it forces the graphics to be displayed on the local
  258. machine.
  259.  
  260. In addition to knowing the name of the machine you want to run Geomview
  261. on, the `Geomview' needs to know the type of that machine (SGI or NeXT).
  262. By default, `Geomview' assumes that it is the same kind of computer as
  263. the one you are running Mathematica on.  The `MachType' option lets you
  264. explicitly specify the type of the `DisplayHost' computer; it should be
  265. one of the strings `"sgi"' or `"next"'.
  266.  
  267. You can use `SetOptions' to change the default `DisplayHost'
  268. and `MachType'.  For example,
  269.      In[4] := SetOptions[Geomview, DisplayHost->"riemann",
  270. MachType->"sgi"] arranges for `Geomview' to run Geomview on an SGI
  271. workstation named `riemann'.
  272.  
  273.  
  274. Transporting Mathematica Files to Geomview by Hand
  275. --------------------------------------------------
  276.  
  277. The auxilliary function `WriteChunk' is for those who can only use
  278. Mathematica on a non-Unix machine (Mac, PC) or a Unix machine that is
  279. not on a network with an SGI or NeXT.  `WriteChunk[FILE, GRAPHICS]'
  280. generates a file named FILE which contains the graphics object GRAPHICS
  281. in the format accepted by `math2oogl'.
  282.  
  283. You can transfer that file to a computer that has Geomview installed on
  284. it and then use the programs `math2oogl', `oogl2rib', and
  285. `geomview' directly from the shell.  These programs are distributed
  286. in the `bin/sgi' (on SGIs) or `bin/next' (on NeXTs)
  287. subdirectory of the Geomview directory, and may have been installed so
  288. that they are on your `path'. 
  289.  
  290.      In[1]:= <<OOGL.m
  291.  
  292.      In[2]:= Plot3D[ Sin[x + Sin[y]], {x,-2,2}, {y,-2,2} ]
  293.  
  294.      Out[2]= -SurfaceGraphics-
  295.  
  296.      In[3]:= WriteChunk["mychunk",%2]
  297. This writes the file `mychunk' which contains a description
  298. of the graphics object.  You can then transfer this file to an SGI or
  299. NeXT and type
  300.      math2oogl < mychunk > mma.oogl
  301. to convert it to the OOGL file `mma.oogl' which you can then view
  302. using Geomview. This is the equivalent of the `WriteOOGL' command. 
  303.  
  304. For a result equivalent to the `Geomview' or `Show'
  305. commands, type
  306.      math2oogl -togeomview Mathematica geomview < mychunk
  307.  
  308. The `WriteRIB' command can be emulated from the shell as
  309.      math2oogl < mychunk | oogl2rib -n mma.tiff
  310.  
  311.  
  312.  
  313.  
  314.  
  315. Details of the Mathematica->Geomview Package
  316. ============================================
  317.  
  318. The `OOGL.m' package uses the external program `math2oogl' to
  319. convert `Graphics3D' objects to OOGL format, because a compiled
  320. external program is able to do this conversion many times faster than
  321. Mathematica.
  322.  
  323. The converter will sometimes handle colored SurfaceGraphics objects
  324. correctly that Mathematica does not handle correctly, which means that
  325. Geomview[object] sometimes works where Show[object] will give errors.
  326.  
  327. The converter supports the `Polygon', `Line', and `Point'
  328. graphics primitives, `RGBColor Graphics3D' directives, and
  329. `SurfaceGraphics' objects with or without `RGBColor'
  330. directives, and lists of any combination of these. It silently ignores
  331. all other directives.
  332.  
  333. The Mathematica to RenderMan conversion is actually a two-step process:
  334. Mathematica->OOGL (math2oogl), and OOGL->RenderMan (oogl2rib). The
  335. math2oogl program has only been tested on SGIs and NeXTs, but could
  336. theoretically compile on any machine. The oogl2rib program depends on
  337. the OOGL (Object Oriented Graphics Language) libraries, which now only
  338. exist on SGI and NeXT machines.
  339.  
  340. In the `WriteOOGL' and `WriteRIB' commands, filename can either be a
  341. string containing a filename, an `OutputStream' object, or a string
  342. starting with a `!' to send the output to a command.  Object can be a
  343. `Graphics3D' object, a `SurfaceGraphics' object, or a list of these.
  344.  
  345. The packages work best with Mathematica 2.0 or better.  With version 1.2,
  346. the Geomview display is always on the local host. 
  347.  
  348.  
  349. Installing the Mathematica Packages
  350. ===================================
  351.  
  352. If Geomview is properly installed on your system according to the
  353. instructions in *Note Installation::, then the Mathematica-to-Geomview
  354. packages should work as described here; there should be no need for
  355. additional installation procedures.  In practice, however, it is
  356. sometimes necessary to taylor the installation of the Mathematica
  357. packages and/or of Geomview itself to suit the needs of a particular
  358. system.  This section contains details about how the installation works;
  359. if the Mathematica-to-Geomview connection does not seem to work for you
  360. after following the Geomview installation procedure, consult this
  361. section to see what might need to be fixed.
  362.  
  363. In this section, the phrase *Geomview installation* refers any of
  364. the procedures in *Note Installation::.  The way the Mathematica packages
  365. work and are installed is the same regardless of whether you have
  366. one of the binary distributions or the source distribution.
  367.  
  368.  
  369.   1. The relevant mathematica files are `OOGL.m', `Geomview.m', and
  370.      `BezierPlot.m'; Mathematica must be able to find these files.  They
  371.      are distributed in the `$GEOMROOT/mathematica' subdirectory of the
  372.      binary distributions, and in the
  373.      `$GEOMROOT/src/bin/geomutil/math2oogl' subdirectory of the source
  374.      distribution.  These files need to be in a directory that is on
  375.      Mathematica's search path.  You can look at the value of the
  376.      `$Path' variable in a Mathematica session on your system to see a
  377.      list of the directories on Mathematica's search path.
  378.  
  379.      The Geomview installation procedure puts copies of the Mathematica
  380.      packages into a directory that you specify (`MMAPACKAGEDIR').  This
  381.      should ensure that Mathematica can find them.  Alternately, you could
  382.      arrange to append the pathname of the Mathmematica package subdirectory
  383.      of the Geomview distribution to the `$Path' variable each time you
  384.      run Mathematica.
  385.  
  386.   2. The package `OOGL.m' needs to be able to invoke the programs
  387.      `geomview', `math2oogl', and `oogl2rib'.  The Geomview
  388.      installation procedure installs these programs into a directory that you
  389.      specify for executables (`BINDIR').  Ideally, this directory should
  390.      be on your shell's `$path'.  More specifically, it should be on
  391.      the `$path' of the shell in which Mathematica runs; the directory
  392.      `/usr/local/bin' is usually a good choice.  You can see the list of
  393.      directories on this path by giving the command `!echo $path' in
  394.      Mathematica.
  395.  
  396.      If for some reason you can't arrange for `geomview',
  397.      `math2oogl', and `oogl2rib' to be in a directory on the
  398.      shell's `$path', you can modify `OOGL.m' to cause it to look
  399.      for them using absolute pathnames.  To do this, change the definitions
  400.      of the variables `$GeomviewPath' and `$GeomRoot', which are
  401.      defined near the top of the file.  Change `$GeomviewPath' to the
  402.      absolute pathname of the `geomview' shell script on your system.
  403.      Change `$GeomRoot' to the absolute pathname of the
  404.      `$GEOMROOT' directory on your system.  If you do this, you should
  405.      also make sure there are copies of `geomview', `math2oogl',
  406.      and `oogl2rib' in the `$GEOMROOT/bin/sgi' (on an SGI) or
  407.      `$GEOMROOT/bin/next' (on a NeXT) directory.
  408.  
  409.   3. The `geomview' shell script, which `OOGL.m' uses to invoke
  410.      Geomview, needs to be able to find the geomview executable file (which
  411.      is called `gvx' on the SGI and `Geomview.app/Geomview' on the
  412.      NeXT).  The Geomview installation procedure should have been taken care
  413.      of this, but if your Mathematica session doesn't seem to be able to
  414.      invoke Geomview, it's worth double-checking that the settings in the
  415.      `geomview' script are correct.
  416.  
  417.  
  418.